#ifndef ROBOTSETTINGS_H
#define ROBOTSETTINGS_H

#include <QVector>
#include <QString>
#include <QMutex>

#include "domparser.h"
//using namespace Eigen;
class RobotEngine;

enum EM_SCARA_DETAIL_TYPE
{
    EM_SCARA_600,
    EM_SCARA_END
};
enum ROBOT_TYPE{SCARA,PUMMA};


/**
  2017.5.18, xyf, 修改零点功能： 零点是一个机器DH参数的姿态 （关节角度有可能不为零），即零点标定和回零点，编码器反馈可能非零。
  */
#ifdef ROBOTENGINE_LIBRARY
#include "robotengine_global.h"
class    ROBOTENGINESHARED_EXPORT   RobotSettings :  public DomParser
        #else
class  RobotSettings :  public DomParser
        #endif
{
public:

    RobotSettings(QString xml);

    /**
     * @brief robotEngine 机器人引擎指针
     */
    RobotEngine* robotEngine;
    /**
     * @brief xml: xml文件名,  read only
     */
    QString xml;
    /**
     * @brief zeroOrderList     回零顺序列表
     */
    QVector <int> zeroOrderList;
    /**
     * @brief zeroSpeedList
     */
    QVector <double> zeroSpeedList;
    /**
     * @brief safePointList     安全点点位信息
     */
    QVector <double> safePointList;
    /**
     * @brief homeMethodList    回零方式
     */
    QVector <int> homeMethodList;
    /**
     * @brief homeSpeedToSwitch 到限位开关的回零速度
     */
    QVector <int> homeSpeedToSwitch;
    /**
     * @brief homeSpeedToZero   到Z相脉冲的回零速度
     */
    QVector <int> homeSpeedToZero;
    /**
     * @brief homeAccList   回零加速度
     */
    QVector <int> homeAccList;
    /**
     * @brief zeroPosition  零点位置
     */
    QVector<int> zeroPosition;
    /**
     * @brief robotAttitude  机器人零点标定后的姿态
     */
    QVector<int> robotAttitude;

    unsigned int currentCounter;

    /**
     * @brief isHomeOffsetOK 原点正常标志
     */
    bool isHomeOffsetOK;

public:

    void mastering(int dof, int encoderPosition);
    /**
     * @brief saveDataToXml 将当前所有参数保存到ｘｍｌ文件
     */
    void saveDataToXml();
    /**
     * @brief readDataFromXml　从ｘｍｌ文件读取所有参数
     */
    void readDataFromXml();

    /**
     * @brief writexml　 ///为了操作方便添加，writexml, 写某个参数
     * @param nodeName
     * @param nodeVal
     */
    void writexml( QString nodeName, QString nodeVal );

    /**
     * @brief readxml  ///为了操作方便添加 readxml,  读取某个参数
     * @param nodeName
     * @return
     */
    QString readxml( QString nodeName );

    /**
     * @brief setZeroPos  带姿态的零点标定 (new), HMI用这个
     * @param realPos     真实编码器的值，用 getMotorPositionRobot_real()获取
     * @param attitude    机器人零点标定后的姿态
     */
    int setZeroPos(QVector<int> realPos, QVector<int> attitude  );

    /**
     * @brief setEcatHomeOffset  设置ecat零点偏移
     * @param pos
     */
    void setEcatHomeOffset( QVector<int> pos );

    //md5 每个模块自己做，分开
private:

};



#endif // ROBOTSETTINGS_H
